﻿using NLog;
using Tokenizers.DotNet;

namespace WYD.Common.AI;

public class QwenTokenizer
{
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); 
    
    /// <summary>
    /// 计算Token数量
    /// </summary>
    /// <param name="text">输入的文本</param>
    /// <returns>返回Token数量</returns>
    public static int CountTokens(string text)
    {
        var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
        var tokenizerJsonPath = Path.Combine(baseDirectory, "tokenizer.json"); 
        
        if (!File.Exists(tokenizerJsonPath))
        {
            Console.WriteLine($"错误：找不到文件 {tokenizerJsonPath}");
            return 0;
        }
        
        // 加载分词器实例
        var tokenizer = new Tokenizer(tokenizerJsonPath);

        // 2. 定义待计算的文本
        // var text = "在 .NET 中计算 Qwen token，你需要使用第三方库。";

        // 3. 对文本进行编码
        // 这将返回一个 EncodingResult 对象，其中包含了 Token ID 列表
        var encodingResult = tokenizer.Encode(text);

        // 4. 获取 Token 数量
        var tokenCount = encodingResult.Length;
        // Logger.Info($"Token ID 数量: {tokenCount}");
        // Logger.Info($"Token IDs: [{string.Join(", ", encodingResult)}]");

        return tokenCount;
    }
}